package server.secretaria.organizacion;

import persistencia.dominio.*;
import persistencia.Persistencia;
import comun.constantes.*;

abstract public class CreaPermisos {

 protected Persistencia persistencia;

 //tipos de usuarios
 protected TipoUsuario tipoUsuarioAlumno = null;
 protected TipoUsuario tipoUsuarioTutor = null;
 protected TipoUsuario tipoUsuarioVeedor = null;
 protected TipoUsuario tipoUsuarioAdministrador = null;
 protected TipoUsuario tipoUsuarioDirector = null;
 protected TipoUsuario tipoUsuarioMonitorSiat = null;
 protected TipoUsuario tipoUsuarioWebMaster = null;
 protected TipoUsuario tipoUsuarioResponsable = null;
 
 //Los distintos tipos de Recursos
 protected Recurso recursoChat = null;
 protected Recurso recursoInicio = null;
 protected Recurso recursoEstadisticas = null;
 protected Recurso recursoEstadisticasAcceso = null;
 protected Recurso recursoCorreo = null;
 protected Recurso recursoEncuestasLlenar = null;
 protected Recurso recursoEncuestasHabilitar = null;
 protected Recurso recursoEncuestasResultados = null;
 protected Recurso recursoCarpetaPersonal = null;

 protected Recurso recursoMaterial = null;
 protected Recurso recursoMaterialAdicional = null;
 protected Recurso recursoSoftware = null;
 protected Recurso recursoBibliografia = null;
 protected Recurso recursoEnlaces = null;


 protected Recurso recursoNoticias = null;
 protected Recurso recursoEvaluarArchivo = null;
 protected Recurso recursoSecretaria = null;
 protected Recurso recursoDatosPersonales = null;
 protected Recurso recursoInformacion = null;
 protected Recurso recursoCalendario = null;
 protected Recurso recursoFAQ = null;
 protected Recurso recursoForoOpinion = null;
 protected Recurso recursoForoEstado = null;
 protected Recurso recursoForoAsunto = null;
 protected Recurso recursoAlertas = null;
 protected Recurso recursoOferta = null;
 protected Recurso recursoContactos = null;
 protected Recurso recursoSeguimiento = null;
 protected Recurso recursoAdministracion = null;
  
 protected Recurso recursoAdministracionPlataforma = null;
 protected Recurso recursoCrearOrganizacion = null;
 protected Recurso recursoBuscarUsuario = null;
 protected Recurso recursoAgregarUsuario = null;
 protected Recurso recursoAsignarUsuarioAula = null;
 protected Recurso recursoCargaAlumnosDesdeArchivo = null;
 protected Recurso recursoAsignarMiembrosEquipoDocente = null;
 protected Recurso recursoAsignarAlumnosComisiones = null;
 protected Recurso recursoListadoAlumnos = null;
 protected Recurso recursoUsuariosActivos = null;
 protected Recurso recursoAulasDeUnUsuario = null;
 protected Recurso recursoAdministrarSolicitudesAulas = null;
 protected Recurso recursoCambiarEstadoAulas = null;
 protected Recurso recursoCrearComisiones = null;
 protected Recurso recursoAgregarQuitarTipoUsuario = null;
 protected Recurso recursoConfiguracionAula = null;

  // Los distintos tipos de permisos
 protected TipoPermiso tipoPermisoNinguno = null;
 protected TipoPermiso tipoPermisoLectura = null;
 protected TipoPermiso tipoPermisoEscritura = null;


  abstract public void cargarPermisosOrganizacion(Aula organizacion);

  public CreaPermisos(Persistencia persistencia) throws Exception
  {
    this.persistencia=persistencia;
    cargarTiposUsuario();
    cargarTipoPermiso();
    cargarRecursos();
  }


  protected void cargarRecursos() throws Exception
  {
    //Los distintos tipos de Recursos
    recursoChat = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CHAT+"\" ").elementAt(0);
    recursoInicio = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.INICIO+"\" ").elementAt(0);
    recursoNoticias = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.NOTICIAS+"\" ").elementAt(0);
    recursoEstadisticas = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ESTADISTICAS+"\" ").elementAt(0);
    recursoEstadisticasAcceso = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ESTADISTICAS_ACCESO+"\" ").elementAt(0);
    recursoEncuestasLlenar = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ENCUESTAS_LLENAR+"\" ").elementAt(0);
    recursoEncuestasHabilitar = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ENCUESTAS_HABILITAR+"\" ").elementAt(0);
    recursoEncuestasResultados = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ENCUESTAS_RESULTADOS+"\" ").elementAt(0);
    recursoCarpetaPersonal = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CARPETA_PERSONAL+"\" ").elementAt(0);
    recursoMaterial =(Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.MATERIALES+"\" ").elementAt(0);
    recursoMaterialAdicional = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.MATERIALES_ADICIONALES+"\" ").elementAt(0);
    recursoCorreo = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CORREO+"\" ").elementAt(0);
    recursoBibliografia =(Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.BIBLIOGRAFIA+"\" ").elementAt(0);
    recursoSoftware = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.SOFTWARE+"\" ").elementAt(0);
    recursoEnlaces = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ENLACES+"\" ").elementAt(0);
    recursoNoticias = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.NOTICIAS+"\" ").elementAt(0);
    recursoEvaluarArchivo = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.EVALUAR_ARCHIVO+"\" ").elementAt(0);
    recursoSecretaria = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.SECRETARIA+"\" ").elementAt(0);
    recursoDatosPersonales = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.DATOS_PERSONALES+"\" ").elementAt(0);
    recursoInformacion = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.INFORMACION+"\" ").elementAt(0);
    recursoCalendario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CALENDARIO+"\" ").elementAt(0);
    recursoFAQ = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.FAQ+"\" ").elementAt(0);
    recursoForoAsunto = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.FORO_ASUNTO+"\" ").elementAt(0);
    recursoForoEstado = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.FORO_ESTADO+"\" ").elementAt(0);
    recursoForoOpinion = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.FORO_OPINION+"\" ").elementAt(0);
    recursoAlertas =(Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ALERTAS+"\" ").elementAt(0);
    recursoOferta = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.OFERTA+"\" ").elementAt(0);
    recursoContactos = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CONTACTOS+"\" ").elementAt(0);
    recursoSeguimiento = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.SEGUIMIENTO+"\" ").elementAt(0);
    recursoAdministracion = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ADMINISTRACION+"\" ").elementAt(0);
    recursoAdministracionPlataforma = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ADMINISTRACION_PLATAFORMA+"\" ").elementAt(0);
    recursoCrearOrganizacion = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CREAR_ORGANIZACION+"\" ").elementAt(0);
    recursoBuscarUsuario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.BUSCAR_USUARIO+"\" ").elementAt(0);
    recursoAgregarUsuario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.AGREGAR_USUARIO+"\" ").elementAt(0);
    recursoAsignarUsuarioAula = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ASIGNAR_USUARIO_A_UN_AULA+"\" ").elementAt(0);
    recursoCargaAlumnosDesdeArchivo = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CARGA_ALUMNOS_DESDE_ARCHIVO+"\" ").elementAt(0);
    recursoAsignarMiembrosEquipoDocente = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ASIGNAR_MIEMBROS_EQUIPO_DOCENTE+"\" ").elementAt(0);
    recursoAsignarAlumnosComisiones = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ASIGNAR_ALUMNOS_COMISIONES+"\" ").elementAt(0);
    recursoListadoAlumnos = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.LISTADO_ALUMNOS+"\" ").elementAt(0);
    recursoUsuariosActivos = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.USUARIOS_ACTIVOS+"\" ").elementAt(0);
    recursoAulasDeUnUsuario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.AULAS_DE_UN_USUARIO+"\" ").elementAt(0);
    recursoAdministrarSolicitudesAulas = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ADMINISTRAR_SOLICITUDES_AULAS+"\" ").elementAt(0);
    recursoCambiarEstadoAulas = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CAMBIAR_ESTADO_AULAS+"\" ").elementAt(0);
    recursoCrearComisiones = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CREAR_COMISIONES+"\" ").elementAt(0);
    recursoAgregarQuitarTipoUsuario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.AGREGAR_O_QUITAR_TIPO_DE_USUARIO+"\" ").elementAt(0);
    recursoConfiguracionAula = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CONFIGURACION_AULA+"\" ").elementAt(0); 
    
  }



protected void cargarTipoPermiso() throws Exception
  {
    tipoPermisoNinguno = (TipoPermiso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion==\""+TIPO_PERMISOS.NINGUNO+"\" ").elementAt(0);
    tipoPermisoLectura= (TipoPermiso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion==\""+TIPO_PERMISOS.LECTURA+"\" ").elementAt(0);
    tipoPermisoEscritura= (TipoPermiso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion==\""+TIPO_PERMISOS.ESCRITURA+"\" ").elementAt(0);
  }

protected void cargarTiposUsuario() throws Exception
{
    tipoUsuarioTutor = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.TUTOR+"\" ").elementAt(0);
    tipoUsuarioAlumno = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.ALUMNO+"\" ").elementAt(0);
    tipoUsuarioVeedor = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.VEEDOR+"\" ").elementAt(0);
    tipoUsuarioAdministrador = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.ADMINISTRADOR+"\" ").elementAt(0);
    tipoUsuarioMonitorSiat = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.MONITOR_SIAT+"\" ").elementAt(0);
    tipoUsuarioWebMaster = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.WEBMASTER+"\" ").elementAt(0);
    tipoUsuarioResponsable = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.RESPONSABLE+"\" ").elementAt(0);
    tipoUsuarioDirector = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.DIRECTOR+"\" ").elementAt(0);
 }


  protected void crearPermiso(Aula aula, Recurso recurso, TipoPermiso tipoPermiso, TipoUsuario tipoUsuario)
  {
    PermisoAcceso permisoAcceso = new PermisoAcceso();
    permisoAcceso.setRecurso(recurso);
    permisoAcceso.setTipoPermiso(tipoPermiso);
    permisoAcceso.setAula(aula);
    permisoAcceso.setTipoUsuario(tipoUsuario);
    persistencia.hacerPersistente(permisoAcceso);
  }

  protected void crearPermisoMonitorSiat(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
  {
    crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioMonitorSiat);
  }

  protected void crearPermisoResponsable(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
  {
    crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioResponsable);
  }

  protected void crearPermisoWebMaster(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
  {
    crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioWebMaster);
  }

   protected void crearPermisoVeedor(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
   {
     crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioVeedor);
   }

   protected void crearPermisoTutor(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
   {
     crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioTutor);
   }

   protected void crearPermisoAdministrador(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
   {
     crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioAdministrador);
   }

   protected void crearPermisoDirector(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
   {
     crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioDirector);
   }
   protected void crearPermisoAlumno(Aula aula, Recurso recurso, TipoPermiso tipoPermiso)
   {
     crearPermiso(aula, recurso, tipoPermiso, tipoUsuarioAlumno);
   }
   

  abstract protected void cargarPermisosMonitorSIAT(Aula aula);

  abstract protected void cargarPermisosAdministrativo(Aula aula);

  abstract protected void cargarPermisosResponsable(Aula aula);

  abstract protected void cargarPermisosDirector(Aula aula);
  
  abstract protected void cargarPermisosTutor(Aula aula);  

  abstract protected void cargarPermisosVeedor(Aula aula);
  
  abstract protected void cargarPermisosAlumno(Aula aula);

  protected void cargarPermisosWebMaster(Aula aula){
   crearPermisoWebMaster(aula, recursoAlertas, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoCalendario, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoCarpetaPersonal, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoChat, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoDatosPersonales, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoEncuestasHabilitar, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoEncuestasLlenar, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoEncuestasResultados, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoEstadisticas, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoEstadisticasAcceso, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoEvaluarArchivo, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoInformacion, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoInicio, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoMaterial, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoBibliografia, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoEnlaces, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoSoftware, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoMaterialAdicional, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoNoticias, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoSecretaria, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoContactos, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoSeguimiento, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoAdministracion, tipoPermisoEscritura);   
   crearPermisoWebMaster(aula, recursoBuscarUsuario, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoListadoAlumnos, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoCargaAlumnosDesdeArchivo, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoConfiguracionAula, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoAsignarMiembrosEquipoDocente, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoAsignarAlumnosComisiones, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoCambiarEstadoAulas, tipoPermisoEscritura);
   crearPermisoWebMaster(aula, recursoAgregarQuitarTipoUsuario, tipoPermisoEscritura);
 }
}